package string_learn.oj;

/**
 * @author yuisama
 * @date 2022/09/25 09:44
 * leetcode 415号问题，大数运算
 **/
public class Num415_AddStrings {
    public String addStrings(String num1, String num2) {
        // i和j依次从num1和num2的最低位开始向高位运算
        int i = num1.length() - 1;
        int j = num2.length() - 1;
        // add保存每次运算的进位数
        int add = 0;
        StringBuilder sb = new StringBuilder();
        // 当i或j >= 0，说明还有一个数字遍历完毕
        // 此处add != 0 说明还有进制数没有运算，此时num1和num2的长度相同
        while (i >= 0 || j >= 0 || add != 0) {
            // 若i或j走到负数，说明当前数字已经处理完毕，高位补0
            int x = i >= 0 ? num1.charAt(i) - '0' : 0;
            int y = j >= 0 ? num2.charAt(j) - '0' : 0;
            int tmpAdd = x + y + add;
            sb.append(tmpAdd % 10);
            add = tmpAdd / 10;
            i --;
            j --;
        }
        sb.reverse();
        return sb.toString();
    }
}